<?php
/**
 * AB-PHP Data Access Object (DAO)
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 *
 * @author Patrick J. Mizer
 * @package ab.core
 */
namespace Ab\Core;

class Dao
{
    /**
     * @var \Ab\Core\DatabaseConnection
     */
    private $connection;

    /**
     * Constructor
     * 
     * @param DatabaseConnection $connection
     */
    public function __construct(DatabaseConnection $connection) {
        $this->connection = $connection;
    }

    /**
     * Save a conversion to persistence
     * @param Conversion $conversion
     * @return boolean
     */
    public function registerConverion($testId, $testVersionId) {
        $sql = 'INSERT INTO conversions (conversion_time,
            test_id, test_variation_label) VALUES (NOW(), ?, ?)';
        $stmt = $this->connection->prepare($sql);

        $params = array(
            $testId,
            $testVersionId
        );

        $stmt->execute($params);
    }

    /**
     * Save a test impression to persistence
     * @param TestVariation $testVariation
     * @param string  $testVariationLabel
     */
    public function registerTestImpression(TestVariation $testVariation) {
        $sql = 'INSERT INTO test_impressions (test_id, test_variation_label,
            impression_time, uri, ip_address, user_agent) VALUES (?, ?, NOW(), ?, ?, ?)';
        $stmt = $this->connection->prepare($sql);

        $params = array(
            $testVariation->getTest()->getTestId(),
            $testVariation->getLabel(),
            @$_SERVER['REQUEST_URI'],
            @$_SERVER['REMOTE_ADDR'],
            @$_SERVER['HTTP_USER_AGENT']
        );
       
        $stmt->execute($params);
    }
}
?>